

package modelo;

import java.lang.String;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;


public class ModeloProductoDAO extends Conexion{
	
    public ModeloProductoDAO(){    		
            super();
    }

    public boolean registar(ModeloProducto m){
        boolean sw = false;
        String tira="INSERT INTO Producto (codigo, Cod_Categoria, descripcion, precio, status ) VALUES('"+m.getCodigo()+"','"+m.getCod_categoria()+"','"+m.getDescripcion()+"',"+m.getPrecio()+",'"+m.getStatus()+"')";
        sw = ejecutar(tira);
        return sw;
    }
    

    public void registarIngredientes(ModeloProducto m, Vector<String> codigos,Vector<Float> cantidades){
    
        for (int i = 0; i < cantidades.size(); i++){
            String tira="INSERT INTO IngredienteXProducto (cod_ing, cod_pro, cantidad, status) VALUES('"+ codigos.elementAt(i)+"','"+m.getCodigo()+"',"+cantidades.elementAt(i)+",'A')";
            ejecutar(tira);
            
        }        
        
    } 

  public Vector<ModeloProducto> listar(){
    Vector<ModeloProducto> v = new Vector<ModeloProducto>();
    String tira="SELECT * FROM Producto WHERE status='A'";

    try {
        ResultSet rs = consultar(tira);
        while (rs.next()){
            ModeloProducto  i = new ModeloProducto();
            i.setDescripcion(rs.getString("descripcion"));
            i.setCodigo(rs.getString("codigo"));
            i.setPrecio(rs.getFloat("precio"));
            i.setStatus(rs.getString("status"));
            i.setCod_categoria(rs.getString("cod_categoria"));
            v.add(i);
         }
    } catch (SQLException ex) {
        Logger.getLogger(ModeloProductoDAO.class.getName()).log(Level.SEVERE, null, ex);
    }
    return v;
  }

  public Vector<String []> ingredientesMasUsados(boolean orden){
    Vector<String []> v = new Vector<String []>();
    String tira="SELECT cantidades , descripcion , codigo FROM  Ingrediente,(SELECT SUM(cantidad) AS cantidades,cod_ing AS cod_aux FROM IngredientexProducto GROUP BY cod_ing) aux WHERE Ingrediente.codigo=aux.cod_aux ORDER BY cantidades ";
    if(orden)
        tira+= "asc";
    else
        tira+= "desc";

    try {
        ResultSet rs = consultar(tira);   
        while (rs.next()){
            String [] s = {rs.getString(2), ""+rs.getDouble(1)};
            v.add(s);
        }
  } catch (SQLException ex) {
        Logger.getLogger(ModeloProductoDAO.class.getName()).log(Level.SEVERE, null, ex);
    }
    return v;
  }
  
  public Vector<String []> listarVentas(boolean orden){
    Vector<String []> v = new Vector<String []>();
    String tira="SELECT descripcion, (precio*aux.cantidades), aux.cantidades, codigo FROM  Producto, (SELECT sum(ProductoXOrden.cantidad) as cantidades, ProductoXOrden.cod_pro AS cod_aux FROM ProductoXOrden GROUP BY ProductoXOrden.cod_pro) aux WHERE aux.cod_aux=codigo AND status='A' ORDER BY(aux.cantidades,(precio*aux.cantidades)) ";
    if(orden)
        tira+= "asc";
    else
        tira+= "desc";
   
    try{
        ResultSet rs= consultar(tira);
        while (rs.next()){
            String [] s = new String [] {rs.getString(1), ""+rs.getDouble(2), ""+rs.getDouble(3), rs.getString(4)};
            v.add(s);
        }
    } catch (SQLException ex) {
        Logger.getLogger(ModeloProductoDAO.class.getName()).log(Level.SEVERE, null, ex);
    }
    return v;
  }

   public boolean revisarStockIngredientes(ModeloProducto m,int cantidad){
    Vector<ModeloIngrediente> v = new Vector<ModeloIngrediente>();
    Vector<Double> d = new Vector<Double>();
    String tira="SELECT Ingrediente.codigo,IngredientexProducto.cantidad FROM  Ingrediente,IngredientexProducto,Producto WHERE Ingrediente.status='A' AND Producto.status='A' AND Ingrediente.codigo=IngredientexProducto.cod_ing AND Producto.codigo=IngredientexProducto.cod_pro AND Producto.codigo='"+m.getCodigo()+"'";
    try{
        ResultSet rs =consultar(tira);
        while(rs.next()){
            ModeloIngrediente  i = new ModeloIngrediente();
            i.setCodigo(rs.getString(1));
            d.add(rs.getDouble(2));
            v.add(i);
         }
     } catch (SQLException ex) {
            Logger.getLogger(ModeloIngredienteDAO.class.getName()).log(Level.SEVERE, null, ex);
     }
     ModeloIngredienteDAO dao = new ModeloIngredienteDAO();
     for (int i = 0; i < v.size(); i++)
         if(!(dao.revisarStock(v.elementAt(i),(d.elementAt(i)*cantidad)))){
          return false;
         }
     return true;
  }

 public void actualizarStockIngredientes(ModeloProducto m){
	 Vector<ModeloIngrediente> v = new Vector<ModeloIngrediente>();
	    Vector<Double> d = new Vector<Double>();
	    String tira="SELECT Ingrediente.codigo,IngredientexProducto.cantidad FROM  Ingrediente,IngredientexProducto,Producto WHERE Ingrediente.status='A' AND Producto.status='A' AND Ingrediente.codigo=IngredientexProducto.cod_ing AND Producto.codigo=IngredientexProducto.cod_pro AND Producto.codigo='"+m.getCodigo()+"'";
	    try{
	        ResultSet rs =consultar(tira);
	        while(rs.next()){
	            ModeloIngrediente  i = new ModeloIngrediente();
	            i.setCodigo(rs.getString(1));
	            d.add(rs.getDouble(2));
	            v.add(i);
	         }
	     } catch (SQLException ex) {
	            Logger.getLogger(ModeloIngredienteDAO.class.getName()).log(Level.SEVERE, null, ex);
	     }
     
	     ModeloIngredienteDAO dao = new ModeloIngredienteDAO();
	     for (int i = 0; i < v.size(); i++){
	    	 dao.consultar(v.elementAt(i));
	    	 v.elementAt(i).setStock(v.elementAt(i).getStock()-d.elementAt(i));
	    	 dao.restarStock(v.elementAt(i));
	     }
  }

}
